/// 点击计数代理
/// 用于检测连续快速点击，当达到指定次数时触发特殊操作
class SlcClickCountProxy {
  /// 默认有效时间间隔（毫秒）
  static const int defValidInterval = 512;

  /// 默认执行计数
  static const int defExecuteCount = 5;

  /// 有效时间间隔（毫秒）
  int validInterval = defValidInterval;

  /// 执行计数
  int executeCount = defExecuteCount;

  /// 上次调用时间
  int preCallTime = 0;

  /// 当前点击计数
  int currentClickCount = 0;

  /// 执行监听器（达到指定次数时触发）
  OnExecuteListener? onExecuteListener;

  /// 点击监听器（每次点击时触发）
  OnClickListener? onClickListener;

  /// 调用方法
  void call() {
    final currentTime = DateTime.now().millisecondsSinceEpoch;
    final preCallTimeTemp = preCallTime;
    preCallTime = currentTime;

    if (currentTime - preCallTimeTemp < validInterval) {
      currentClickCount++;
      if (currentClickCount == executeCount) {
        currentClickCount = 0;
        // 触发执行监听器
        onExecuteListener?.call();
        return;
      }
    } else {
      currentClickCount = 1;
    }

    // 触发点击监听器
    onClickListener?.call();
  }
}

/// 执行监听器接口
typedef OnExecuteListener = void Function();

/// 点击监听器接口
typedef OnClickListener = void Function();

